package compilador.lexico;

/**
 * Representação de um token, com tipo e lexema.
 *
 * @author Carlos H V Pinto
 */
public class Token {

    private TipoToken tipo;
    private String lexema;

    public Token(TipoToken tipo, String valor) {
        this.tipo = tipo;
        this.lexema = valor;
    }

    public TipoToken getTipo() {
        return tipo;
    }

    public void setTipo(TipoToken tipo) {
        this.tipo = tipo;
    }

    public String getLexema() {
        return lexema;
    }

    public void setLexema(String lexema) {
        this.lexema = lexema;
    }

    /*
     * Sobreposição do método toString() para mostrarmos as mensagens corretas 
     * no arquivo de saída
     */
    @Override
    public String toString() {
        if (tipo == TipoToken.Identificador) {
            return lexema + " - identificador";
        }

        if (tipo == TipoToken.CadeiaLiteral) {
            return lexema + " - cadeia_literal";
        }

        if (tipo == TipoToken.NumeroInteiro) {
            return lexema + " - numero_inteiro";
        }

        if (tipo == TipoToken.NumeroReal) {
            return lexema + " - numero_real";
        }

        // Outros tipos de tokens (palavras e simbolos reservados)
        return lexema + " - " + lexema;
    }
}
